package com.cy.pj.sys.service.impl;

import com.cy.pj.common.annottion.RequiredLog;
import com.cy.pj.common.annottion.RequiredTime;
import com.cy.pj.sys.dao.SysNoticeDao;
import com.cy.pj.sys.pojo.SysNotice;
import com.cy.pj.sys.service.SysNoticeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
//@Service有spring提供,
// 一般用于描述分层架构中的业务逻辑对象.
// 这样的类会交给spring管理
@Service
public class SysNoticeImpl implements SysNoticeService {

    //门面模式-(创建日志门面API对象,使用接口的规范(耦合于接口),通过底层创建对象来使用API)-----工厂模式(LoggerFactory,工厂创建日志对象)
    //springBoot默认帮我们引入日志,不需要我们自己添加依赖
    //创建日志门面API对象
    private static final Logger log= LoggerFactory.getLogger(SysNoticeImpl.class);

    //has a的关系---将a作为has的一个属性(is a是一些实现或是继承等)

    @Autowired
    private SysNoticeDao sysNoticeDao;


    @RequiredLog(operation = "新增公告信息")
    @Override
    public int saveNotice(SysNotice notice) {
        int rows = sysNoticeDao.insertNotice(notice);
        return rows;
    }
    //RequiredLog注解描述的方法为日志切入点方法
    @RequiredLog(operation = "查询公告列表")
    @Override
    @RequiredTime
    public List<SysNotice> findNotices(SysNotice notice) {
        //log.debug("start:{}",System.currentTimeMillis());//{}表示占位符
        List<SysNotice> list = sysNoticeDao.selectNotice(notice);
        //log.debug("end:{}",System.currentTimeMillis());//{}表示占位符
        return list;
    }

    @Override
    public int deleteById(Long... id) {
        int rows= sysNoticeDao.deleteById(id);
        if(rows==0)throw new RuntimeException("记录可能已经不存在");
        return rows;
    }

    @Override
    @RequiredTime
    public SysNotice findById(Long id) {
        SysNotice id1 = sysNoticeDao.selectById(id);
        return id1;
    }

    @Override
    public int updateNotice(SysNotice notice) {
        int i = sysNoticeDao.updateNotice(notice);
        return i;
    }
}
